from Tkinter import *
import pickle
import tkSimpleDialog as tks
import tkFileDialog as tkf
import tkMessageBox as tkm
import random
from batiment2 import *
from Etoile import *
from Planete import *
from unite import *
from univers import *

class Vue(object):
    def __init__(self, parent):
        self.parent=parent
        
        self.root=Tk()
        ######################Ecran de depart######################
        self.framePrincipal=Frame(self.root, width=300, height=300)
        self.boutonJoindre=Button(self.framePrincipal, text="Joindre une partie", command=self.parent.joindrePartie)
        self.boutonCreer=Button(self.framePrincipal, text="Creer une partie", command=self.creerPartie)
        self.boutonJoindre.pack()
        self.boutonCreer.pack()
        self.framePrincipal.pack()
        ###########################################################
        
        ######################Ecran de creation de partie######################
        self.frameCreer=Frame(self.root,height=500, width=500, bg="black")
        self.titre=Canvas(self.frameCreer, height=30, width=500, bg="black")
        self.titre.create_text(250,20,text="Initialisation du serveur...", fill="yellow")
        self.titre.grid(row=0, sticky=N)
        
        Label(self.frameCreer, text="Nombre d'etoiles", fg="gray", bg="black").grid(row=1, sticky=W)
        Label(self.frameCreer, text="Largeur univers", fg="gray", bg="black").grid(row=2, sticky=W)
        Label(self.frameCreer, text="Hauteur univers", fg="gray", bg="black").grid(row=3, sticky=W)
        Label(self.frameCreer, text="Profondeur univers", fg="gray", bg="black").grid(row=4, sticky=W)
        
        self.nbEtoiles=Entry(self.frameCreer)
        self.largeur=Entry(self.frameCreer)
        self.hauteur=Entry(self.frameCreer)
        self.profondeur=Entry(self.frameCreer)
        
        self.nbEtoiles.grid(row=1, column=0)
        self.largeur.grid(row=2, column=0)
        self.hauteur.grid(row=3, column=0)
        self.profondeur.grid(row=4, column=0)
        
        self.boutonCustom=Button(self.frameCreer, text="Creer avec\nvaleurs specifiees", command=self.creerCustom)
        self.boutonDefaut=Button(self.frameCreer, text="Creer avec\nvaleurs par defaut", command=self.creerDefaut)
        self.boutonCustom.grid(row=5, column=0)
        self.boutonDefaut.grid(row=5, column=1)
        #########################################################################
        
        
        ######################Ecran de jeu######################
        self.frameJeu=Frame(self.root)
        self.canvasJeu = Canvas(self.frameJeu, height=800, width=1200, bg="black")
        self.canvasJeu.pack()
        self.menuUnite = Button(self.frameJeu, text="Unites", command = self.listUnite)
        self.menuUnite.place(x=35, y=775)
        self.menuStructure = Button(self.frameJeu, text="Structures", command = self.listStructure)
        self.menuStructure.place(x=150, y=775)
        self.canvasJeu.create_oval(525, 650, 675, 800, fill="black", outline="white")
        self.canvasJeu.create_rectangle(525, 630, 675, 655, fill="white")
        self.canvasJeu.create_text(600, 642, font = ("Arial", 16), text = "Mini-Map")
        self.canvasJeu.bind("<ButtonPress-1>", self.selection)
        self.canvasJeu.bind("<ButtonPress-3>", self.deplacer)
        #########################################################
        
    ######################Fonctions de jeu######################
             
    def deplacer(self, event):
        z=10
        if self.parent.checkProprietaire(self.selectionne) == 1:
            self.parent.initMouvement(self.selectionne, event.x-600, event.y-400, z)
        
    ######################Fonctions de creation######################
    def creerCustom(self):
        nbEtoiles=int(self.nbEtoiles.get())
        largeur=int(self.largeur.get())/2
        hauteur=int(self.hauteur.get())/2
        profondeur=int(self.profondeur.get())
        self.parent.creerCustom(nbEtoiles,largeur,hauteur,profondeur)
        
    def creerDefaut(self):
        self.parent.creerDefaut()
        
    ######################Changements d'ecrans######################
    def creerPartie(self):
        if self.parent.serveur.demanderSiPartie()== "oui":
            tkm.askretrycancel("Deja une partie", "Il y a deja une partie en cours")
        else:
            self.framePrincipal.forget()
            self.frameCreer.pack()
    
    def ecranPrincipal(self):
        self.frameCreer.forget()
        self.framePrincipal.pack()

        
    def partieEnCours(self):
        self.frameCreer.forget()
        self.selectionne=0
        self.frameJeu.pack()
        self.uniteBool=False
        self.structureBool=False
        self.afficher()
    
    ######################Fonctions d'interface de jeu######################
    def afficher(self):
        compteur = 0
        for i in self.parent.modele.univers.tabUnites:
            if compteur == self.selectionne:
                self.canvasJeu.create_oval(i.x+(600), i.y+(400), i.x+(600)+20, i.y+(400)+20, fill="yellow")
                compteur += 1
            else:
                self.canvasJeu.create_oval(i.x+600, i.y+400,i.x+600+20, i.y+400+20, fill="red")
                compteur += 1
                
    def effacer(self):
        for i in self.parent.modele.univers.tabUnites:
            if i == self.selectionne:
                self.canvasJeu.create_oval(i.x+(600), i.y+(400), i.x+(600)+20, i.y+(400)+20, fill="black")
            else:
                self.canvasJeu.create_oval(i.x+(600), i.y+(400),i.x+(600)+20, i.y+(400)+20, fill="black")
    
    def selection(self, event):
        compteur=0
        for i in self.parent.modele.univers.tabUnites:
            if (event.x>=(i.x+600)) and (event.x<=(i.x+600)+20) and (event.y>=(i.y+400)) and (event.y<=(i.y)+400+20):
                self.selectionne = compteur
                self.canvasJeu.create_oval(i.x+600, i.y+400, i.x+600+20, i.y+400+20, fill="yellow")
            else:
                compteur +=1
                self.canvasJeu.create_oval(i.x+600, i.y+400, i.x+600+20, i.y+400+20, fill="red")
        print self.selectionne
        #if compteur > 0:
            #self.selectionne=0
                
    def listUnite(self):
        if self.uniteBool == False:
            self.listUnites=Listbox(self.frameJeu)
            for self.unites  in  ["grunt", "proto-grunt"]:
                self.listUnites.insert(END,self.unites)
            self.listUnites.place(x=5, y=600)
            self.uniteBool = True
        else:
            self.listUnites.destroy()
            self.uniteBool=False
    
    def listStructure(self):
        if self.structureBool == False:
            self.listStructures=Listbox(self.frameJeu)
            for self.structures in ["StationSpatial", "CentreEchange", "ExtracteurS", "CMilitaire", "CSciences", "UAttack", "UDefense", "Bob", "Bobby", "lol", "hah", "goHabsgo"]:
                self.listStructures.insert(END, self.structures)
            self.listStructures.place(x=130, y=600)
            self.structureBool=True
        else:
             self.listStructures.destroy()
             self.structureBool=False